package com.cskaoyan.jdbc;

import com.cskaoyan.jdbc.util.JdbcUtil;

import java.io.IOException;
import java.sql.*;
import java.util.Scanner;

/**
 * @ClassName Login_6
 * @Description: TODO
 * @Author 远志 zhangsong@cskaoyan.onaliyun.com
 * @Date 2023/2/7 8:59
 * @Version V1.0
 **/
public class Login_7 {

    public static void main(String[] args) {
        //利用scanner来接收用户在控制台的输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名：");
        String username = scanner.nextLine();
        System.out.println("请输入密码：");
        String password = scanner.nextLine();

        //后续的流程，便是到数据库中进行比对 select * from user where username = xxx and password = xxx
        Connection connection = null;
        ResultSet resultSet = null;
        PreparedStatement preparedStatement = null;
        try {
            //之前编写的一个工具类的封装：主要的步骤是获取连接
            connection = JdbcUtil.getConnection();
            //预编译：先将sql的主体部分发送到数据库进行解析，进行处理，转换成机器指令之后，再次填充参数
            //那么此时即便用户再输入潜在的关键字，也不会对系统产生任何影响了。应为sql语句转换成机器指令的步骤已经执行完毕，用户输入的关键字就是普普通通的字符
            //利用sql主体，创建一个preparedStatement，预编译sql对象。先将sql语句进行预编译，后续填充参数
            preparedStatement = connection.prepareStatement("select * from user where username = ? and password = ?");
            //这两步就是填充参数；注意：JDBC中index是从1开始的，而不是从0
            preparedStatement.setString(1, username);
            preparedStatement.setString(2, password);
            //执行查询
            resultSet = preparedStatement.executeQuery();
            if(resultSet.next()){
                //只要resultSet中有数据，那么便认为是登录成功的
                System.out.println("登录成功");
            }else {
                System.out.println("登录失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                //关闭资源
                JdbcUtil.release(connection, preparedStatement, resultSet);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}
